﻿


using IotContract.Dtos.Clients.Equips;
using IotContract.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XT.Common.Extensions;

namespace IotClientService.Handles.hks;

/// <summary>
/// OCV和充放电xml处理
/// </summary>
public class XmlSub
{


    string PRI_NGCODE = "01";




    public static int Lf_StrToIntDef(string s, int @default)
    {
        int num;
        int num1;
        num1 = !int.TryParse(s, out num) ? @default : num;
        return num1;
    }





    public XmlSub()
    {
    }

    public object Lf_iif(bool cond, object val_t, object val_f)
    {
        return !cond ? val_f : val_t;
    }
    /// <summary>
    /// 解析 数据
    /// </summary>
    /// <param name="rxMsg"></param>
    /// <param name="Group"></param>
    /// <param name="Parser"></param>
    /// <returns></returns>
    public ParserDefine XmlDocParsing(string rxMsg, HkOcvFmtEquipDto Group)
    {
        try
        {
            var parser = new ParserDefine()
            {
                LineNo = Lf_Copy(rxMsg, 2, 4).Trim().ToUpper(),
                FrMsg = Lf_Copy(rxMsg, 6, 8).Trim().ToUpper(),
                ToMsg = Lf_Copy(rxMsg, 14, 8).Trim().ToUpper(),
                Command = Lf_Copy(rxMsg, 22, 4),
                RetCode = Lf_Copy(rxMsg, 40, 4).Trim()
            };

            // pC->IMS  设备可以入库应答
            if (Group.EquipType == IotEquipType.FMT.ToString())
            {
                if (parser.Command == "1101")
                {
                    // 入库可能设备应答 多数据
                    Parsing_FMT1101(rxMsg, Group, parser);
                }
                // 入库预约通知应答
                else if (parser.Command == "1102")
                {

                    CopyStageNo(rxMsg, parser);
                }
                // 入库完成通知应答
                else if (parser.Command == "1103")
                {
                    CopyStageNo(rxMsg, parser);
                }
                // 检查结束通知应答
                else if (parser.Command == "1104")
                {
                    CopyStageAndTray(rxMsg, parser);

                }
                // 结果File应答 多数据
                else if (parser.Command == "1105")
                {

                    Parsing_FMT1105(rxMsg, parser);
                }
                // 结果 File 接收确认通知应答
                else if (parser.Command == "1106")
                {
                    CopyStageAndTray(rxMsg, parser);
                }
                // 出库完成通知应答
                else if (parser.Command == "1107")
                {
                    CopyStageNo(rxMsg, parser);
                }
                // Mode变更应答
                else if (parser.Command == "1108")
                {
                    CopyStageNo(rxMsg, parser);
                }
                // 设备状态通知应答
                else if (parser.Command == "1109")
                {
                    CopyStageNoStsModel(rxMsg, parser);
                }
                // 设备库位移库
                else if (parser.Command == "1110")
                {
                    CopyMoveStage(rxMsg, parser);
                }
                // 设备库位复测
                else if (parser.Command == "1112")
                {
                    CopyMoveStage(rxMsg, parser);
                }

            }
            else if (Group.EquipType == IotEquipType.OCV.ToString() )
            {
                if (parser.Command == "1201")
                {
                    CopyStageAndTray(rxMsg, parser);
                }
                else if (parser.Command == "1202")
                {
                    CopyStageAndTray(rxMsg, parser);
                }
                else if (parser.Command == "1203")
                {
                    // Some Data Parse
                    Parsing_OCV1203(rxMsg, parser);
                }
                else if (parser.Command == "1204")
                {
                    CopyStageAndTray(rxMsg, parser);
                }
                else if (parser.Command == "1205")
                {
                    CopyStageAndTray(rxMsg, parser);
                }
                else if (parser.Command == "1206")
                {
                    Parsing_OCV1206(rxMsg, parser);
                }
                else if (parser.Command == "1207")
                {
                    Parsing_OCV1206(rxMsg, parser);
                }
                else if (parser.Command == "1208")
                {
                    CopyStageNo(rxMsg, parser);
                }
                else if (parser.Command == "1209")
                {
                    Parsing_OCV1209(rxMsg, parser);
                }
            }
            //else if (Group.EquipType == HKEquipType.RNK)
            //{
            //    if (parser.Command == "1601")
            //    {
            //        CopyStageAndTray(rxMsg, parser);
            //    }
            //    else if (parser.Command == "1602")
            //    {
            //        CopyStageAndTray(rxMsg, parser);
            //    }
            //    else if (parser.Command == "1603")
            //    {
            //        Parsing_RNK1603(rxMsg, parser);
            //    }
            //    else if (parser.Command == "1604")
            //    {
            //        Parsing_RNK1604(rxMsg, parser);
            //    }
            //    else if (parser.Command == "1608")
            //    {
            //        CopyStageNo(rxMsg, parser);
            //    }
            //    else if (parser.Command == "1609")
            //    {
            //        CopyStageNoStsModel(rxMsg, parser);
            //    }
            //}
            //else if (Group.EquipType == HKEquipType.CPK)
            //{
            //    if (parser.Command == "1701")
            //    {
            //        CopyStageAndTray(rxMsg, parser);
            //    }
            //    if (parser.Command == "1702")
            //    {
            //        Parsing_CPK1702(rxMsg, parser);
            //    }
            //    if (parser.Command == "1703")
            //    {
            //        Parsing_CPK1703(rxMsg, parser);
            //    }
            //    if (parser.Command == "1704")
            //    {
            //        Parsing_CPK1704(rxMsg, parser);
            //    }
            //    if (parser.Command == "1705")
            //    {
            //        Parsing_CPK1705(rxMsg, parser);
            //    }
            //    if (parser.Command == "1706")
            //    {
            //        Parsing_CPK1706(rxMsg, parser);
            //    }
            //    if (parser.Command == "1707")
            //    {
            //        Parsing_CPK1707(rxMsg, parser);
            //    }
            //    if (parser.Command == "1708")
            //    {
            //        CopyStageNo(rxMsg, parser);
            //    }
            //    if (parser.Command == "1709")
            //    {
            //        CopyStageNoStsModel(rxMsg, parser);
            //    }
            //}


            if (parser.Command == "1012")
            {
                Parsing_COM1012(rxMsg, Group, parser);
            }
            return parser;
        }
        catch (Exception exception)
        {
            var errorMsg = $"{Group.ToString()} 解析plc数据有误，{exception.Message}";
            return new ParserDefine
            {
                AlarmMsg = errorMsg
            };
        }




    }


    public string Lf_Copy(string str, int start, int cutsize)
    {
        string str1;
        string str2 = "";
        int num = start - 1;
        str2 = str.Substring(num, str.Length - num);
        str1 = cutsize < str2.Length ? str2.Substring(0, cutsize) : str2;
        return str1;
    }
    /// <summary>
    /// 报警数据
    /// </summary>
    /// <param name="rdata"></param>
    /// <param name="Group"></param>
    /// <param name="Parser"></param>
    public void Parsing_COM1012(string rdata, HkOcvFmtEquipDto Group, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        if (Group.Name.IndexOf("OCV") > -1 ? false : Group.Name.IndexOf("FMT") <= -1)
        {
            Parser.ErrCode = Lf_Copy(rdata, 55, 4).Trim();
        }
        else
        {
            Parser.ErrCode = Lf_Copy(rdata, 55, 2).Trim();
        }
    }

    public void Parsing_CPK1701(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_CPK1702(string rdata, ParserDefine Parser)
    {
        int num = 260;
        int num1 = 0;
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 20; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
        for (int j = 0; j < 20; j++)
        {
            num1 = j * 13;
            int num2 = j * 3;
            Parser.Step[0].Slot[j].CellId = Lf_Copy(rdata, 62 + num1, 13).Trim();
            Parser.Step[0].Slot[j].Channel = Lf_StrToIntDef(Lf_Copy(rdata, 62 + num + num2, 3).Trim(), 0);
        }
        Parser.TimeE = Lf_Copy(rdata, 26, 14).Trim();
    }

    public void Parsing_CPK1703(string rdata, ParserDefine Parser)
    {
        Parser.Step[0] = new StepInfoDefine();
        Parser.Step[0].Slot[0] = new CellInfoDefine();
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
        Parser.Step[0].Slot[0].NCh = Lf_StrToIntDef(Lf_Copy(rdata, 62, 3).Trim(), 0);
    }

    public void Parsing_CPK1704(string rdata, ParserDefine Parser)
    {
        int num = 1300;
        int num1 = 0;
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 20; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 28).Trim();
        Parser.Step[1].Slot[0].OCh = Lf_StrToIntDef(Lf_Copy(rdata, 83, 1).Trim(), 0);
        for (int j = 0; j < 100; j++)
        {
            num1 = j * 13;
            Parser.Step[0].Slot[j].CellId = Lf_Copy(rdata, 84 + num1, 13).Trim();
        }
        Parser.Step[1].Slot[0].Rank = Lf_Copy(rdata, 84 + num, 2).Trim().ToUpper();
        Parser.Step[1].Slot[0].RankText = Lf_Copy(rdata, 84 + num, 2).Trim().ToUpper();
        Parser.Step[1].Slot[0].NCh = Lf_StrToIntDef(Lf_Copy(rdata, 86 + num, 3).Trim(), 0);
        Parser.TimeS = Lf_Copy(rdata, 86 + num + 3, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, 86 + num + 17, 14).Trim();
    }

    public void Parsing_CPK1705(string rdata, ParserDefine Parser)
    {
        Parser.Step[0] = new StepInfoDefine();
        Parser.Step[0].Slot[0] = new CellInfoDefine();
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 28).Trim();
        Parser.TrayID2 = Lf_Copy(rdata, 83, 28).Trim();
        Parser.TrayID3 = Lf_Copy(rdata, 111, 28).Trim();
        Parser.TimeS = Lf_Copy(rdata, 139, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, 153, 14).Trim();
    }

    public void Parsing_CPK1706(string rdata, ParserDefine Parser)
    {
        int num = 0;
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 20; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        for (int j = 0; j < 20; j++)
        {
            num = 13 * j;
            Parser.Step[0].Slot[j].CellId = Lf_Copy(rdata, 55 + num, 13).Trim();
        }
    }

    public void Parsing_CPK1707(string rdata, ParserDefine Parser)
    {
        int num = 2688;
        int num1 = 0;
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 96; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 15).Trim();
        Parser.Step[0].Slot[0].OCh = Lf_StrToIntDef(Lf_Copy(rdata, 70, 2).Trim(), 0);
        for (int j = 0; j < 96; j++)
        {
            num1 = j * 28;
            Parser.Step[0].Slot[j].CellId = Lf_Copy(rdata, 72 + num1, 28).Trim();
        }
        Parser.Step[0].Slot[0].NCh = Lf_StrToIntDef(Lf_Copy(rdata, 72 + num, 2).Trim(), 0);
        Parser.TimeS = Lf_Copy(rdata, 72 + num + 2, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, 72 + num + 16, 14).Trim();
    }

    public void Parsing_CPK1708(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void Parsing_CPK1709(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.StageStatus = Lf_Copy(rdata, 55, 1).Trim();
        Parser.StageMode = Lf_Copy(rdata, 56, 1).Trim();
    }

    public void Parsing_ECS1401(string rdata, ParserDefine Parser)
    {
        Parser.TransKind = Lf_Copy(rdata, 51, 1).Trim();
        Parser.FrPort = Lf_Copy(rdata, 52, 3).Trim();
        Parser.ToPort = "";
        Parser.FrLoc = "";
        Parser.ToLoc = "";
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
        Parser.TrayID2 = Lf_Copy(rdata, 62, 7).Trim();
        Parser.TrayID3 = Lf_Copy(rdata, 69, 7).Trim();
        Parser.TrayID4 = Lf_Copy(rdata, 76, 7).Trim();
        Parser.TrayID5 = Lf_Copy(rdata, 83, 7).Trim();
        Parser.TrayID6 = Lf_Copy(rdata, 90, 7).Trim();
        Parser.BatchNo = "";
    }

    public void Parsing_ECS1402(string rdata, ParserDefine Parser)
    {
        Parser.TransKind = Lf_Copy(rdata, 51, 1).Trim();
        Parser.FrPort = Lf_Copy(rdata, 52, 3).Trim();
        Parser.ToPort = Lf_Copy(rdata, 55, 3).Trim();
        Parser.FrLoc = Lf_Copy(rdata, 58, 9).Trim();
        Parser.ToLoc = Lf_Copy(rdata, 67, 9).Trim();
        Parser.TrayID = Lf_Copy(rdata, 76, 7).Trim();
        Parser.TrayID2 = Lf_Copy(rdata, 83, 7).Trim();
        Parser.TrayID3 = Lf_Copy(rdata, 90, 7).Trim();
        Parser.TrayID4 = Lf_Copy(rdata, 97, 7).Trim();
        Parser.TrayID5 = Lf_Copy(rdata, 104, 7).Trim();
        Parser.TrayID6 = Lf_Copy(rdata, 111, 7).Trim();
        Parser.BatchNo = Lf_Copy(rdata, 118, 20).Trim();
        Parser.EMGJob = Lf_Copy(rdata, 138, 1).Trim();
        Parser.TrayType = Lf_Copy(rdata, 139, 2).Trim();
    }

    public void Parsing_ECS1403(string rdata, ParserDefine Parser)
    {
        Parser.TransKind = Lf_Copy(rdata, 51, 1).Trim();
        Parser.FrPort = Lf_Copy(rdata, 52, 3).Trim();
        Parser.ToPort = Lf_Copy(rdata, 55, 3).Trim();
        Parser.FrLoc = Lf_Copy(rdata, 58, 9).Trim();
        Parser.ToLoc = Lf_Copy(rdata, 67, 9).Trim();
        Parser.TrayID = Lf_Copy(rdata, 76, 7).Trim();
        Parser.TrayID2 = Lf_Copy(rdata, 83, 7).Trim();
        Parser.TrayID3 = Lf_Copy(rdata, 90, 7).Trim();
        Parser.TrayID4 = Lf_Copy(rdata, 97, 7).Trim();
        Parser.TrayID5 = Lf_Copy(rdata, 104, 7).Trim();
        Parser.TrayID6 = Lf_Copy(rdata, 111, 7).Trim();
        Parser.BatchNo = Lf_Copy(rdata, 118, 20).Trim();
    }

    public void Parsing_ECS1404(string rdata, ParserDefine Parser)
    {
        Parser.FrPort = Lf_Copy(rdata, 51, 3).Trim();
        Parser.StageNo = Lf_Copy(rdata, 54, 6).Trim();
        Parser.ErrCode = Lf_Copy(rdata, 60, 2).Trim();
        Parser.FrLoc = Lf_Copy(rdata, 62, 9).Trim();
        Parser.ToLoc = Lf_Copy(rdata, 71, 9).Trim();
    }

    public static void Parsing_ECS1405(string rdata)
    {
    }

    public static void Parsing_ECS1406(string rdata)
    {
    }

    public void Parsing_ECS1407(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 3).Trim();
        Parser.GroupNum = Lf_Copy(rdata, 54, 4).Trim();
        Parser.ErrCode = Lf_Copy(rdata, 58, 1).Trim();
    }

    public void Parsing_ECS1408(string rdata, ParserDefine Parser)
    {
        if (rdata.Trim().Length != 93)
        {
            Parser.FrStage = "";
            Parser.MachType = "";
            Parser.ErrCode = Parser.ErrCode.PadLeft(5, '0');
            Parser.StageStatus = "";
            Parser.TimeS = "";
            Parser.TimeE = "";
        }
        else
        {
            Parser.FrStage = Lf_Copy(rdata, 51, 5).Trim();
            Parser.MachType = Lf_Copy(rdata, 56, 2);
            Parser.ErrCode = Lf_Copy(rdata, 58, 5).Trim().PadLeft(5, '0');
            Parser.StageStatus = Lf_Copy(rdata, 63, 1);
            Parser.TimeS = Lf_Copy(rdata, 64, 14).Trim();
            Parser.TimeE = Lf_Copy(rdata, 78, 14).Trim();
        }
    }

    public static void Parsing_ECS1409(string rdata)
    {
    }

    public static void Parsing_ECS1411(string rdata)
    {
    }

    public static void Parsing_ECS1412(string rdata)
    {
    }

    public static void Parsing_ECS1413(string rdata)
    {
    }

    public void Parsing_FIR1601(string rdata, ParserDefine Parser)
    {
        Parser.FrLoc = Lf_Copy(rdata, 51, 9).Trim();
        Parser.ToLoc = Lf_Copy(rdata, 60, 9).Trim();
    }

    public void Parsing_FIR1602(string rdata, ParserDefine Parser)
    {
        Parser.FrLoc = Lf_Copy(rdata, 51, 9).Trim();
        Parser.ToLoc = Lf_Copy(rdata, 60, 5).Trim();
    }

    public void Parsing_FMT1101(string rdata, HkOcvFmtEquipDto Group, ParserDefine Parser)
    {
        string text = "";
        for (int i = 0; i < Parser.Stage.Length; i++)
        {
            Parser.Stage[i].StageNo = "";
            Parser.Stage[i].StageStatus = "";
            Parser.Stage[i].StageMode = "";

        }
        // equipNo
        string s = Lf_Copy(Group.Name, 7, 2);
        int result = 1;
        int.TryParse(s, out result);
        int[] array = new int[24]
        {
        108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
        108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
        108, 108, 108, 108
        };
        int[] array2 = new int[24]
        {
        1001, 1109, 1217, 1325, 1433, 1541, 1649, 1757, 1865, 1973,
        2081, 2189, 2297, 2405, 2513, 2621, 2729, 2837, 2945, 3053,
        3161, 3269, 3377, 3485
        };
        int num = 0;



        for (int j = 1; j <= Parser.Stage.Length; j++)
        {
            text = (array2[result - 1] + (j - 1)).ToString();
            Parser.Stage[j - 1].StageNo = text;
            num = 51 + (j - 1) * 2;
            Parser.Stage[j - 1].StageStatus = Lf_Copy(rdata, num, 1);
            num = 52 + (j - 1) * 2;
            Parser.Stage[j - 1].StageMode = Lf_Copy(rdata, num, 1);

            if (j >= array[result - 1])
            {
                break;
            }
        }
    }

    public void Parsing_FMT1102(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void Parsing_FMT1103(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }
    public void CopyStageNo(string rdata, ParserDefine parser)
    {
        parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void CopyStageAndTray(string rdata, ParserDefine parser)
    {
        parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_FMT1104(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }
    /// <summary>
    /// 充放电结果
    /// </summary>
    /// <param name="rdata"></param>
    /// <param name="Parser"></param>
    public void Parsing_FMT1105(string rdata, ParserDefine Parser)
    {
        int num;
        for (int i = 0; i < (int)Parser.Step.Length; i++)
        {
            Parser.Step[i] = new StepInfoDefine();
            for (int j = 0; j < 400; j++)
            {
                Parser.Step[i].Slot[j] = new CellInfoDefine();
            }
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TypeNo = Lf_Copy(rdata, 55, 4).Trim();
        Parser.ProcNo = Lf_Copy(rdata, 59, 2).Trim();
        Parser.ProcType = Lf_Copy(rdata, 61, 3).Trim();
        Parser.BatchNo = Lf_Copy(rdata, 64, 16).Trim();
        Parser.TrayID = Lf_Copy(rdata, 80, 7).Trim();
        int num1 = 87;
        int intDef = Lf_StrToIntDef(Lf_Copy(rdata, num1, 2).Trim(), 0);
        Parser.TotalStep = intDef;
        int num2 = num1 + 2;
        int num3 = 3;
        int num4 = 2800;
        int num5 = 2800;
        int num6 = 2800;
        int num7 = 2800;
        int num8 = 2800;
        int num9 = 2800;
        int num10 = 2800;
        int num11 = 2800;
        int num12 = 2800;
        int num13 = 2800;
        int num14 = 2800;
        int num15 = 2000;
        int num16 = 2000;
        int num17 = 2000;
        int num18 = 5;
        int num19 = 5;
        int num20 = 5;
        int num21 = num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + num13 + num14 + num15 + num16 + num17 + num18 + num19 + num20;
        string str = "";
        string str1 = "";
        double num22 = 0;
        for (int k = 0; k < intDef; k++)
        {
            num = num2 + k * num21;
            str = Lf_Copy(rdata, num, 2).Trim();
            str = str.PadLeft(2, '0');
            Parser.Step[k].StepNo = str.Trim();
            Parser.Step[k].Action = Lf_Copy(rdata, 2 + num, 1);
            for (int l = 0; l < 400; l++)
            {
                Parser.Step[k].Slot[l].CellId = "1";
                str1 = Lf_Copy(rdata, num3 + num + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].VoltSt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].VoltEd = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].StFrVolt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].EdFrVolt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].CurrSt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].CurrEd = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].CapaSt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].CapaEd = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].StCapa = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].FnCapa = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + num13 + l * 7, 7);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].AvgVolt = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + num13 + num14 + l * 5, 5);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].DchgTime = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + num13 + num14 + num15 + l * 5, 5);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].ChgTime = num22;
                str1 = Lf_Copy(rdata, num3 + num + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11 + num12 + num13 + num14 + num15 + num16 + l * 5, 5);
                double.TryParse(str1, out num22);
                Parser.Step[k].Slot[l].Step_Time = num22;
            }
            num = num2 + (k + 1) * num21;
            str1 = Lf_Copy(rdata, num - 14, 5);
            double.TryParse(str1, out num22);
            Parser.Step[k].Slot[0].Jig_tMx = num22;
            str1 = Lf_Copy(rdata, num - 9, 5);
            double.TryParse(str1, out num22);
            Parser.Step[k].Slot[0].Jig_tMn = num22;
            str1 = Lf_Copy(rdata, num - 5, 5);
            double.TryParse(str1, out num22);
            Parser.Step[k].Slot[0].Jig_tAv = num22;
        }
        int num23 = 800;
        for (int m = 0; m < 400; m++)
        {
            num = num2 + intDef * num21 + m * 2;
            Parser.Step[0].Slot[m].Defect = "00";
            str1 = Lf_Copy(rdata, num, 2).Trim();
            Parser.Step[0].Slot[m].NgCode = str1.PadLeft(2, '0');
            if (Parser.Step[0].Slot[m].NgCode == "00" ? false : Parser.Step[0].Slot[m].NgCode != PRI_NGCODE)
            {
                Parser.Step[0].Slot[m].Defect = Parser.Step[0].Slot[m].NgCode;
            }
        }
        num = num23 + num2 + intDef * num21;
        Parser.TimeS = Lf_Copy(rdata, num, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, num + 14, 14).Trim();
        try
        {
            Parser.Temperatures = new List<string>();

            if (rdata.Length > 2001)
            {
                string flag = rdata.Substring(rdata.Length - 3, 1);
                if (flag == "#")
                {
                    // 获取400个电芯温度
                    var datas = rdata.Substring(rdata.Length - 2003, 2000);
                    Parser.Temperatures = datas.SplitByLength(5).ToList();
                }
            }
        }
        catch (Exception ex)
        {
            Parser.Temperatures = new List<string>();
        }

    }

    public void Parsing_FMT1106(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_FMT1107(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void Parsing_FMT1108(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void CopyStageNoStsModel(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.StageStatus = Lf_Copy(rdata, 55, 1).Trim();
        Parser.StageMode = Lf_Copy(rdata, 56, 1).Trim();
    }
    /// <summary>
    /// 解析移库和复测数据
    /// </summary>
    /// <param name="rdata"></param>
    /// <param name="Parser"></param>
    public void CopyMoveStage(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
        Parser.AlarmMsg = Lf_Copy(rdata, 62, 40).Trim();
        Parser.Mode = Lf_Copy(rdata, 102, 1).Trim();
    }

    public void Parsing_OCV1201(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_OCV1202(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_OCV1203(string rdata, ParserDefine Parser)
    {
        double num;
        for (int i = 0; i < (int)Parser.Step.Length; i++)
        {
            Parser.Step[i] = new StepInfoDefine();
            for (int j = 0; j < 400; j++)
            {
                Parser.Step[i].Slot[j] = new CellInfoDefine();
            }
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TypeNo = Lf_Copy(rdata, 55, 4).Trim();
        Parser.ProcNo = Lf_Copy(rdata, 59, 2).Trim();
        Parser.BatchNo = Lf_Copy(rdata, 61, 10).Trim();
        Parser.TrayID = Lf_Copy(rdata, 71, 7).Trim();
        Parser.Mode = Lf_Copy(rdata, 78, 1).Trim();
        int num1 = 79;
        int num2 = 2000;
        int num3 = num2 + 2800;
        for (int k = 0; k < 400; k++)
        {
            Parser.Step[0].Slot[k].CellId = "";
            string str = Lf_Copy(rdata, num1 + k * 5, 5).Trim();
            double.TryParse(str, out num);
            Parser.Step[0].Slot[k].AcrVal = num;
            str = Lf_Copy(rdata, num1 + num2 + k * 7, 7).Trim();
            double.TryParse(str, out num);
            Parser.Step[0].Slot[k].OcvVal = num;
        }
        int num4 = num1 + num3;
        Parser.TimeS = Lf_Copy(rdata, num4, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, 14 + num4, 14).Trim();
    }

    public void Parsing_OCV1204(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_OCV1205(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_OCV1206(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
        Parser.Mode = Lf_Copy(rdata, 62, 1).Trim();
    }

    public void Parsing_OCV1208(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void Parsing_OCV1209(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.StageStatus = Lf_Copy(rdata, 55, 1).Trim();
        Parser.StageMode = Lf_Copy(rdata, 56, 1).Trim();
        //Lf_StrToIntDef(Lf_Copy(Parser.StageNo, 2, 2), 1);
    }

    public void Parsing_RNK1601(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_RNK1602(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.TrayID = Lf_Copy(rdata, 55, 7).Trim();
    }

    public void Parsing_RNK1603(string rdata, ParserDefine Parser)
    {
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 2; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.CellId = Lf_Copy(rdata, 55, 13).Trim();
        Parser.Step[0].Slot[0].OCh = Lf_StrToIntDef(Lf_Copy(rdata, 68, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ01 = Lf_StrToIntDef(Lf_Copy(rdata, 69, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ02 = Lf_StrToIntDef(Lf_Copy(rdata, 70, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ03 = Lf_StrToIntDef(Lf_Copy(rdata, 71, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ04 = Lf_StrToIntDef(Lf_Copy(rdata, 72, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ05 = Lf_StrToIntDef(Lf_Copy(rdata, 73, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ06 = Lf_StrToIntDef(Lf_Copy(rdata, 74, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ07 = Lf_StrToIntDef(Lf_Copy(rdata, 75, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ08 = Lf_StrToIntDef(Lf_Copy(rdata, 76, 1).Trim(), 0);
        Parser.Step[0].Slot[0].VIZ09 = Lf_StrToIntDef(Lf_Copy(rdata, 77, 1).Trim(), 0);
        Parser.Step[0].Slot[0].NgCode = Lf_Copy(rdata, 78, 2).Trim();
        Parser.TimeS = Lf_Copy(rdata, 80, 14).Trim();
        Parser.TimeE = Lf_Copy(rdata, 94, 14).Trim();
    }

    public void Parsing_RNK1604(string rdata, ParserDefine Parser)
    {
        int num = 130;
        int num1 = 0;
        Parser.Step[0] = new StepInfoDefine();
        for (int i = 0; i < 10; i++)
        {
            Parser.Step[0].Slot[i] = new CellInfoDefine();
        }
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        for (int j = 0; j < 10; j++)
        {
            num1 = j * 13;
            Parser.Step[0].Slot[j].CellId = Lf_Copy(rdata, 55 + num1, 13).Trim();
        }
        Parser.Step[0].Slot[0].OCh = Lf_StrToIntDef(Lf_Copy(rdata, 55 + num, 1).Trim(), 0);
        Parser.TimeE = Lf_Copy(rdata, 26, 14).Trim();
    }

    public void Parsing_RNK1608(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
    }

    public void Parsing_RNK1609(string rdata, ParserDefine Parser)
    {
        Parser.StageNo = Lf_Copy(rdata, 51, 4).Trim();
        Parser.StageStatus = Lf_Copy(rdata, 55, 1).Trim();
        Parser.StageMode = Lf_Copy(rdata, 56, 1).Trim();
    }
}
